// 等待DOM加载完成
document.addEventListener('DOMContentLoaded', function() {
    // 获取DOM元素
    const gameBoard = document.getElementById('game-board');
    const movesElement = document.getElementById('moves');
    const timeElement = document.getElementById('time');
    const bestTimeElement = document.getElementById('best-time');
    const restartBtn = document.getElementById('restart-btn');
    const gameModal = document.getElementById('game-modal');
    const finalTimeElement = document.getElementById('final-time');
    const finalMovesElement = document.getElementById('final-moves');
    const recordMessageElement = document.getElementById('record-message');
    const playAgainBtn = document.getElementById('play-again-btn');
    
    // 游戏状态
    let cards = []; // 卡片数组
    let flippedCards = []; // 当前翻开的卡片
    let matchedPairs = 0; // 已匹配的对数
    let totalPairs = 6; // 总对数 (根据难度可以调整)
    let moves = 0; // 步数
    let timer = null; // 计时器
    let seconds = 0; // 游戏时间（秒）
    let isGameStarted = false; // 游戏是否开始
    let isChecking = false; // 是否正在检查匹配
    let bestTime = localStorage.getItem('memoryGameBestTime'); // 获取最佳时间
    
    // 初始化最佳时间显示
    if (bestTime) {
        bestTimeElement.textContent = formatTime(bestTime);
    }
    
    // 卡片内容（使用emoji作为卡片图案）
    const cardSymbols = ['🌟', '🌈', '🎈', '🎨', '🎯', '🎭', '🎪', '🎢'];
    
    // 初始化游戏
    function initGame() {
        // 重置游戏状态
        gameBoard.innerHTML = '';
        cards = [];
        flippedCards = [];
        matchedPairs = 0;
        moves = 0;
        seconds = 0;
        isGameStarted = false;
        isChecking = false;
        
        // 更新显示
        movesElement.textContent = '0';
        timeElement.textContent = '00:00';
        
        // 停止之前的计时器
        if (timer) {
            clearInterval(timer);
        }
        
        // 隐藏模态框
        gameModal.classList.remove('show');
        
        // 生成卡片数组
        generateCards();
        
        // 渲染卡片到游戏板
        renderCards();
    }
    
    // 生成卡片数组
    function generateCards() {
        // 选择需要的卡片符号（根据总对数）
        const selectedSymbols = cardSymbols.slice(0, totalPairs);
        
        // 创建成对的卡片
        selectedSymbols.forEach(symbol => {
            // 每个符号创建两张卡片
            cards.push({
                id: cards.length,
                symbol: symbol,
                matched: false,
                flipped: false
            });
            
            cards.push({
                id: cards.length,
                symbol: symbol,
                matched: false,
                flipped: false
            });
        });
        
        // 洗牌算法随机排列卡片
        shuffleCards(cards);
    }
    
    // 洗牌算法 (Fisher-Yates)
    function shuffleCards(array) {
        for (let i = array.length - 1; i > 0; i--) {
            const j = Math.floor(Math.random() * (i + 1));
            [array[i], array[j]] = [array[j], array[i]];
        }
    }
    
    // 渲染卡片到游戏板
    function renderCards() {
        cards.forEach((card, index) => {
            const cardElement = document.createElement('div');
            cardElement.classList.add('card');
            if (card.flipped) {
                cardElement.classList.add('flipped');
            }
            if (card.matched) {
                cardElement.classList.add('matched');
            }
            cardElement.dataset.index = index;
            
            cardElement.innerHTML = `
                <div class="card-inner">
                    <div class="card-front">${card.symbol}</div>
                    <div class="card-back">?</div>
                </div>
            `;
            
            // 添加点击事件
            cardElement.addEventListener('click', () => handleCardClick(index));
            
            gameBoard.appendChild(cardElement);
        });
    }
    
    // 处理卡片点击
    function handleCardClick(index) {
        // 如果正在检查匹配、卡片已匹配、卡片已翻开或已经翻开两张卡片，则不处理点击
        if (isChecking || cards[index].matched || cards[index].flipped || flippedCards.length === 2) {
            return;
        }
        
        // 如果游戏还没开始，开始游戏
        if (!isGameStarted) {
            startGame();
        }
        
        // 翻开卡片
        flipCard(index);
        
        // 将卡片添加到已翻开数组
        flippedCards.push(index);
        
        // 如果已经翻开两张卡片，检查是否匹配
        if (flippedCards.length === 2) {
            moves++;
            movesElement.textContent = moves;
            
            // 延迟检查匹配，让玩家有时间看到第二张卡片
            setTimeout(checkMatch, 1000);
        }
    }
    
    // 开始游戏
    function startGame() {
        isGameStarted = true;
        
        // 启动计时器
        timer = setInterval(() => {
            seconds++;
            timeElement.textContent = formatTime(seconds);
        }, 1000);
    }
    
    // 翻开卡片
    function flipCard(index) {
        // 更新卡片状态
        cards[index].flipped = true;
        
        // 更新UI
        const cardElements = document.querySelectorAll('.card');
        cardElements[index].classList.add('flipped');
    }
    
    // 翻回卡片
    function unflipCards(indices) {
        indices.forEach(index => {
            // 更新卡片状态
            cards[index].flipped = false;
            
            // 更新UI
            const cardElements = document.querySelectorAll('.card');
            cardElements[index].classList.remove('flipped');
        });
    }
    
    // 标记卡片为已匹配
    function markCardsAsMatched(indices) {
        indices.forEach(index => {
            // 更新卡片状态
            cards[index].matched = true;
            
            // 更新UI
            const cardElements = document.querySelectorAll('.card');
            cardElements[index].classList.add('matched');
        });
    }
    
    // 检查两张卡片是否匹配
    function checkMatch() {
        isChecking = true;
        
        const [firstIndex, secondIndex] = flippedCards;
        
        // 检查符号是否相同
        if (cards[firstIndex].symbol === cards[secondIndex].symbol) {
            // 匹配成功
            markCardsAsMatched(flippedCards);
            matchedPairs++;
            
            // 检查游戏是否结束
            if (matchedPairs === totalPairs) {
                endGame();
            }
        } else {
            // 匹配失败，翻回卡片
            unflipCards(flippedCards);
        }
        
        // 清空已翻开卡片数组
        flippedCards = [];
        isChecking = false;
    }
    
    // 游戏结束
    function endGame() {
        // 停止计时器
        clearInterval(timer);
        
        // 显示最终结果
        finalTimeElement.textContent = formatTime(seconds);
        finalMovesElement.textContent = moves;
        
        // 检查是否是新的最佳时间
        let isNewRecord = false;
        if (!bestTime || seconds < bestTime) {
            bestTime = seconds;
            localStorage.setItem('memoryGameBestTime', bestTime);
            bestTimeElement.textContent = formatTime(bestTime);
            isNewRecord = true;
        }
        
        // 显示是否破纪录
        if (isNewRecord) {
            recordMessageElement.textContent = '🎉 新纪录！';
        } else {
            recordMessageElement.textContent = '';
        }
        
        // 显示模态框
        gameModal.classList.add('show');
    }
    
    // 格式化时间 (将秒转换为 mm:ss 格式)
    function formatTime(totalSeconds) {
        const minutes = Math.floor(totalSeconds / 60);
        const seconds = totalSeconds % 60;
        return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
    }
    
    // 事件监听器
    restartBtn.addEventListener('click', initGame);
    playAgainBtn.addEventListener('click', initGame);
    
    // 初始化游戏
    initGame();
});